//app.js
const { envList } = require("./envList")
const renderMap = new Map()
function setRenderMap(pageId, updateObj) {
    if (renderMap.has(pageId)) {
        Object.assign(renderMap.get(pageId), updateObj, {reported: false})
    } else {
        renderMap.set(pageId, Object.assign(updateObj, {reported: false}))
    }
    console.debug(`update render map: ${pageId}`, updateObj, JSON.stringify(renderMap.get(pageId)))
}
// wx.onAppRouteDone((res) => {
//   setRenderMap(res.webviewId, {routedone: res.__ts__})
// })
const performance = wx.getPerformance()
const observer = performance.createObserver((entryList) => {
  const navigation = entryList.getEntriesByType("navigation")
  navigation.forEach(res => {
    console.debug("navigation", res)
      const pageId = res.pageId  // 唯一pageid
      const path = res.path
      const time = res.navigationStart || res.startTime// navigationStart 路由真正响应开始时间。仅 navigation 类型指标有效。
            const duration = res.duration
            setRenderMap(pageId, {navigation: time, path, pageId, navigateDuration: duration})
  })
  const render = entryList.getEntriesByType("render")
  render.forEach(res => {
      const pageId = res.pageId
      const obj = {}
      console.debug("render", res)
      obj[res.name] = res.startTime  // firstRender, firstPaint, firstContentfulPaint, largestContentfulPaint
      setRenderMap(pageId, obj)
      if (res.name === "firstRender") {
          // 触发firstRender 4s后, 上报一次事件更新
          setTimeout(() => {
              if (renderMap.get(pageId).reported) return  // 上报过了
              console.warn('pageRender', renderMap.get(pageId))
              setRenderMap(pageId, {reported: true})
          }, 4000)
      }
  })
  console.debug("script", entryList.getEntriesByType("script"))
  console.debug("loadPackage", entryList.getEntriesByType("loadPackage"))
})

observer.observe({ entryTypes: ['render', 'script', 'navigation', 'resource', 'loadPackage'] })

// download 4m file
// setTimeout(() => {
// wx.downloadFile({
//   url: 'https://stream.weixin.qq.com/weapp_dev/DownloadFile?file_name=4M',
//   complete: console.log
// })
// wx.downloadFile({
//   url: 'https://stream.weixin.qq.com/weapp_dev/DownloadFile?file_name=4M',
//   complete: console.log
// })
// }, 1000)
wx.onAppRoute(e => {console.log("route", e)})

wx.onAppRouteDone(e => {console.log("routedone", e)})

// wx.login({
//   success(res) {
//     console.log("login at begin", res)
//   },
//   fail(e) {
//     console.error("login error", e)
//   }
// })
global.test = function (params) {
  console.log("global.test")
  return "global.test"
}
App({
  onLaunch: function (options) {
    // wx.setBackgroundFetchToken({
    //   token: ''
    // })

    wx.onBackgroundFetchData((result) => {console.log("------on fetch data------", result)})

    wx.getBackgroundFetchData({
      fetchType: 'pre',
      success(res) {
        console.warn("-------getBackgroundFetchData-------")
        console.log(res.fetchedData) // 缓存数据
        console.log(res.timeStamp) // 客户端拿到缓存数据的时间戳
        console.log(res.path) // 页面路径
        console.log(res.query) // query 参数
        console.log(res.scene) // 场景值
      }
    })

    console.log("launchoptions", options)
    if (!wx.cloud) {
      console.error('请使用 2.2.3 或以上的基础库以使用云能力');
    } else {
      wx.cloud.init({
        // env 参数说明：
        //   env 参数决定接下来小程序发起的云开发调用（wx.cloud.xxx）会默认请求到哪个云环境的资源
        //   此处请填入环境 ID, 环境 ID 可打开云控制台查看
        //   如不填则使用默认环境（第一个创建的环境）
        // env: 'my-env-id',
        traceUser: true,
      });
    }

    this.globalData = {
      selectedEnv: envList[0],
    };
  },
});
